﻿@using Newtonsoft.Json
@using User.Web.Models.Admin
@model User.Web.Models.Admin.MemberRightModel
@{
    ViewBag.Title = PageTitles.EditRights;
}

<div class="row">
    <div class="col-lg-12">
        <div class="panel panel-default">
            <div class="panel-heading">
                <div class="row">
                    <div class="col-lg-6">
                        <h4>@ViewBag.Title - @Model.UserName (@Model.UserId)</h4>
                    </div>
                </div>
            </div>

            <div class="panel-body">
                <div class="row">
                    <div class="col-lg-12">
                        <table class="table table-striped table-hover liveUpdateRemove">
                            <thead>
                                <tr>
                                    <th style="width: 450px;">@DefaultMessages.AssignedRights</th>
                                    <th style="width: 90px;">@InputFieldNames.Options</th>
                                    <th>&nbsp;</th>
                                </tr>
                            </thead>
                            <!-- ko if: AllowedRights().length > 0 -->
                            <tbody data-bind="foreach: AllowedRights">
                                <tr>
                                    <td data-bind="text: Rightname"></td>
                                    <td style="text-align: center">
                                        <a data-bind="attr: { 'data-rightid': RightId }" class="removeRight" href="#" title="@DefaultMessages.Remove"><i class="fa fa-times fa-lg"></i></a>
                                    </td>
                                    <td>
                                        &nbsp;
                                    </td>
                                </tr>
                            </tbody>
                            <!--/ko-->
                            <!-- ko if: AllowedRights().length === 0 -->
                            <tbody>
                                <tr>
                                    <td colspan="3">
                                        @DefaultMessages.NoRightsAssigned
                                    </td>
                                </tr>
                            </tbody>
                            <!--/ko-->
                        </table>
                    </div>
                </div>

                <div class="row">
                    <div class="col-lg-12">
                        <hr />
                    </div>
                </div>

                <div class="row">
                    <div class="col-lg-12">
                        <table class="table table-striped table-hover liveUpdateAdd">
                            <thead>
                                <tr>
                                    <th style="width: 450px;">@DefaultMessages.DeniedRights</th>
                                    <th style="width: 90px;">@InputFieldNames.Options</th>
                                    <th>&nbsp;</th>
                                </tr>
                            </thead>
                            <!-- ko if: DeniedRights().length > 0 -->
                            <tbody data-bind="foreach: DeniedRights">
                                <tr>
                                    <td data-bind="text: Rightname"></td>
                                    <td style="text-align: center">
                                        <a data-bind="attr: { 'data-rightid': RightId }" class="addRight" href="#" title="@DefaultMessages.Add"><i class="fa fa-plus fa-lg"></i></a>
                                    </td>
                                    <td>
                                        &nbsp;
                                    </td>
                                </tr>
                            </tbody>
                            <!--/ko-->
                            <!-- ko if: DeniedRights().length === 0 -->
                            <tbody>
                                <tr>
                                    <td colspan="3">
                                        @DefaultMessages.NoDeniedRightsAssigned
                                    </td>
                                </tr>
                            </tbody>
                            <!--/ko-->
                        </table>
                    </div>
                </div>
            </div>
            <div class="panel-footer">
                &nbsp;
            </div>
        </div>
    </div>
</div>

<hr />

<div class="row">
    <div class="col-lg-12">
        @Html.ActionLink(ControlNames.Home, "Index", "Home", null, new { @class = "btn btn-default" })

        @Html.ActionLink(ControlNames.UserList, "MemberList", "Admin", null, new { @class = "btn btn-default" })

        @Html.ActionLink(ControlNames.Details, "MemberDetails", "Admin", new { id = Model.UserId }, new { @class = "btn btn-default" })

        @Html.ActionLink(ControlNames.Edit, "MemberEditAdmin", "Admin", new { id = Model.UserId }, new { @class = "btn btn-default" })
    </div>
</div>


@section scripts
{
    @Scripts.Render("~/bundles/knockout")

    <script>

        function MemberRightsViewModel(optionsData) {
            this.searchField = $("#filterText"),
            this.liveUpdateAdd = $(".liveUpdateAdd"),
            this.liveUpdateRemove = $(".liveUpdateRemove"),
            this.viewModel = undefined,
            //Registrieren aller verwendeten Events in unserem View
            this.registerEvents = function() {
                var that = this;
                that.liveUpdateAdd.on('click', ".addRight", function(e) {
                    e.preventDefault();
                    var rightId = $(this).attr('data-rightid');
                    that.AddRight(rightId);
                }),
                that.liveUpdateRemove.on('click', '.removeRight', function(e) {
                    e.preventDefault();
                    var rightId = $(this).attr('data-rightid');
                    that.RemoveRight(rightId);
                });
            },
            this.initialize = function() {
                //Vergleichen der Optionen und zusammenführen der Optionen zu einem Objekt, damit müssen
                //beim Initialisieren nicht immer alle Optionsparameter gesetzt werden.
                this.options = $.extend({}, this.options, optionsData);
                this.viewModel = ko.mapping.fromJS(this.options.viewModelData);
                ko.applyBindings(this.viewModel);

                //Zum Debuggen von KnockoutJs man sieht das komplette Objekt welches zur Verfügung steht
                //http://www.knockmeout.net/2013/06/knockout-debugging-strategies-plugin.html
                //var data = ko.dataFor(document.body);

                this.registerEvents();
                //Laden unserer Anzeigedaten
                this.LoadData();
            };
        }

        //Optionen die wir setzten können, hier müssen nicht alle gesetzt werden, nur die wir wollen
        //sonst wird der hier eingetragenene wert als Standard verwendet
        MemberRightsViewModel.prototype.options = {
            viewModelData : {"AllowedRights":[], "DeniedRights": [], "UserId": 0},
            ajaxLoadDataBaseUrl: "/api/AdminApi/",
            userId: 0
        };

        //Die aktuellen Anzeigedaten vom KO Model aktualisieren
        MemberRightsViewModel.prototype.RefreshViewModelListData = function(daten) {
            ko.mapping.fromJS(daten, this.viewModel);
        };

        //Prototype Function, um die aktuellen Modeldaten zu laden
        MemberRightsViewModel.prototype.LoadData = function () {
            var that = this;
            //Unser filterDataObjekt noch in den passenden JSON String umwandeln.
            $.ajax({
                //url: that.options.ajaxLoadDataBaseUrl,
                url: that.options.ajaxLoadDataBaseUrl + "MemberRightsGetAllRights/" + that.options.userId ,
                type: "POST",
                contentType: 'application/json; charset=utf-8',
                statusCode: {
                    200 /* OK */: function (daten) {
                        that.RefreshViewModelListData(daten);
                    },
                    401:  /* Nicht autorisierter Zugriff */ function () {
                        location.href = "/Home/Index";
                    }
                }
            });
        };

        //Prototype Function, um ein bestimmtes Userrecht dem User hinzuzufügen
        MemberRightsViewModel.prototype.AddRight = function (rightId) {
            var that = this;
            //Unser filterDataObjekt noch in den passenden JSON String umwandeln.
            $.ajax({
                //url: that.options.ajaxLoadDataBaseUrl,
                url: that.options.ajaxLoadDataBaseUrl + "MemberRightsAddRight/" + that.options.userId + "?rightId=" + rightId,
                type: "POST",
                contentType: 'application/json; charset=utf-8',
                statusCode: {
                    200 /* OK */: function () {
                        //Laden der neuen Rechte, wenn kein Fehler aufgetreten ist.
                        that.LoadData();
                    },
                    401:  /* Nicht autorisierter Zugriff */ function () {
                        location.href = "/Home/Index";
                    }
                }
            });
        };

        //Prototype Function, um ein bestimmtes Userrecht dem User zu entziehen
        MemberRightsViewModel.prototype.RemoveRight = function (rightId) {
            var that = this;
            //Unser filterDataObjekt noch in den passenden JSON String umwandeln.
            $.ajax({
                //url: that.options.ajaxLoadDataBaseUrl,
                url: that.options.ajaxLoadDataBaseUrl + "MemberRightsRemoveRight/" + that.options.userId + "?rightId=" + rightId,
                type: "POST",
                contentType: 'application/json; charset=utf-8',
                statusCode: {
                    200 /* OK */: function () {
                        //Laden der neuen Rechte, wenn kein Fehler aufgetreten ist.
                        that.LoadData();
                    },
                    401:  /* Nicht autorisierter Zugriff */ function () {
                        location.href = "/Home/Index";
                    }
                }
            });
        };

        var viewModel = new MemberRightsViewModel({
            viewModelData: @(Html.Raw(JsonConvert.SerializeObject(new MemberRightApiModel()))),
            userId: @Model.UserId
            });

        viewModel.initialize();

    </script>
}
